import { Session } from './session.entity';
import { Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Message {
  @PrimaryGeneratedColumn('uuid', { comment: '主键' })
  id: string;

  @Column({ comment: '问题内容', type: 'text' })
  question: string;

  @Column({ comment: '响应内容', type: 'text' })
  answer: string;

  @CreateDateColumn({ comment: '创建时间', type: 'datetime' })
  createTime: Date;

  @Column({ comment: '消息状态', type: 'tinyint' })
  status: number = 0;

  @Column({ comment: '是否删除 0 未删除  1删除', type: 'tinyint' })
  isDelete: number = 0;

  @ManyToOne(() => Session, (session) => session.messages, {
    // CASCADE 父记录被删除时，所有关联的子记录也会被自动删除
    // DEFAULT 父记录被删除时，所有关联的子记录的外键字段会被设置为其默认值。这需要为外键字段定义一个默认值。
    // NO ACTION 默认行为。当尝试删除父记录时，如果存在关联的子记录，则会抛出错误。数据库不会自动执行任何操作。
    // RESTRICT 类似于 "NO ACTION"，但它是在尝试删除之前检查是否存在依赖项。某些数据库可能将 "NO ACTION" 和 "RESTRICT" 视为相同的行为
    // SET NULL 当父记录被删除时，所有关联的子记录的外键字段会被设置为 NULL。这要求外键字段允许为 NULL
    onDelete: 'SET NULL',
  })
  @JoinColumn({ name: 'sessionId' }) //指定外键
  session: Session;
}
